Kodova stranka
Otázka od: Rumcajs - konference
17. 10. 2002 13:49
Servus ve spolek, resim tenhle problem:
Mam TMemo ve ktere skladam text. Krom toho textu tam mam i nektere dekadicke
znaky (#14, #22 atd). Ted potrbuju vysledny text (pouze text) prevest do
kodovaci stranky 852.
Jak na to?
Respektive, jde nějak nastavit, aby se v tom TMemo rovnou psalo v 852?
Rumcajs
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.401 / Virová báze: 226 - datum vydání: 9.10.2002
Odpovedá: ing. Jan Fiala
17. 10. 2002 14:08
17.10.2002 Rumcajs - konference:
> Servus ve spolek, resim tenhle problem:
> Mam TMemo ve ktere skladam text. Krom toho textu tam mam i nektere dekadicke
> znaky (#14, #22 atd). Ted potrbuju vysledny text (pouze text) prevest do
> kodovaci stranky 852.
> Jak na to?
> Respektive, jde nějak nastavit, aby se v tom TMemo rovnou psalo v 852?
Nastavit to nejde. Proste ve Windows pises v CP1250, popr. jine ANSI.
S tim souvisi problem, ze ANSI neobsahuje vsechny znaky, ktere
obsahuje 852 a naopak (viz ramecky).
Prevod je moznoy pomoci funkci OEMtoANSI a ANSItoOEM, ale bydes se
pred tim muset zbavit tech mrizi a prevest to na znaky. Ale to udelej
az po prevodu do 852.
--
ing. Jan Fiala
mailto:jan.fiala@iol.cz
Odpovedá: Ludek ZITA
17. 10. 2002 16:54
----- Original Message -----
From: "Rumcajs - konference" <konrum@seznam.cz>
> Servus ve spolek, resim tenhle problem:
> Mam TMemo ve ktere skladam text. Krom toho textu tam mam i nektere
dekadicke
> znaky (#14, #22 atd). Ted potrbuju vysledny text (pouze text) prevest do
> kodovaci stranky 852.
> Jak na to?
> Respektive, jde nějak nastavit, aby se v tom TMemo rovnou psalo v 852?
Ahoj.
with Memo1 do
begin
Font.Charset := OEM_CHARSET;
Font.Color := clWindowText;
Font.Name := 'Terminal';
OEMConvert := TRUE;
end;
Ludek
Odpovedá: Rumcajs - konference
18. 10. 2002 8:27
Vsechno spatne ... Text se mi sice zobrazi v 852, ale jenom diky tomu fontu.
Kdyz to odeslu do ciloveho zarizeni (tiskarna EPSON), tak se mi tiskne porad
ANSI - tedy same nesmysly. Potrebuju, aby to slo napsat cesky a pak cely
obsha toho TMema prevest do 852 a pak odeslat ....
Rumcajs 18.10.2002; 8:16
> Ahoj.
>
> with Memo1 do
> begin
> Font.Charset := OEM_CHARSET;
> Font.Color := clWindowText;
> Font.Name := 'Terminal';
> OEMConvert := TRUE;
> end;
>
>
> Ludek
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.401 / Virová báze: 226 - datum vydání: 9.10.2002
Odpovedá: Lukas Gebauer
18. 10. 2002 11:28
A co to treba proste vzit, prekodovat a pak poslat na tiskarnu?
Funkce na prekodovani stringu mas treba v me Synapsi (unita
SynaChar). Muzes to tim prekodovat do ceho se ti to zlibi, nejen do
CP852, ale trebas i do Kameniku, do ISO-latinu2, do unicodu.. Ba
dokonce budes-li chtit, muzes jednoduse odstranit diakritiku.
> Vsechno spatne ... Text se mi sice zobrazi v 852, ale jenom diky tomu
> fontu. Kdyz to odeslu do ciloveho zarizeni (tiskarna EPSON), tak se mi
> tiskne porad ANSI - tedy same nesmysly. Potrebuju, aby to slo napsat
> cesky a pak cely obsha toho TMema prevest do 852 a pak odeslat ....
-- Lukas Gebauer.
E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Synapse Delphi and Kylix TCP/IP Lib.
Odpovedá: Peter Vlkovic
18. 10. 2002 10:31
Ahoj,
ku konverzii mozes pouzit napriklad aj nizsie
uvedenu jednoucelovu funkciu.
Vlkovic
function cp852to1250 ( S: string ): string;
var
i: integer;
p: integer;
Ch: char;
const
Cp852 =
#$A0#$61#$61#$61#$84#$63#$63#$87#$83#$64#$65#$82#$88#$65#$A1#$69+
#$8D#$8C#$6C#$6E#$A4#$94#$A2#$94#$93#$AA#$A9#$73#$73#$A8#$9F#$74+
#$81#$A3#$96#$81#$98#$7A#$7A#$91#$8F#$41#$41#$41#$8E#$43#$43#$80+
#$85#$44#$45#$90#$89#$45#$8B#$49#$8A#$9C#$4C#$4E#$A5#$99#$95#$99+
#$A7#$AB#$9E#$53#$53#$9B#$86#$54#$9A#$97#$A6#$9A#$9D#$5A#$5A#$92;
Cp1250 =
#$E1#$E2#$E3#$B9#$E4#$E6#$E7#$E8#$EF#$F0#$EB#$E9#$EC#$EA#$ED#$EE+
#$E5#$BE#$B3#$F1#$F2#$F6#$F3#$F5#$F4#$E0#$F8#$9C#$BA#$9A#$9D#$FE+
#$FC#$FA#$F9#$FB#$FD#$BF#$9F#$9E#$C1#$C2#$C3#$A5#$C4#$C6#$C7#$C8+
#$CF#$D0#$CB#$C9#$CC#$CA#$CD#$CE#$C5#$BC#$A3#$D1#$D2#$D6#$D3#$D5+
#$D4#$C0#$D8#$8C#$AA#$8A#$8D#$DE#$DC#$DA#$D9#$DB#$DD#$AF#$8F#$8E;
begin
for i := 1 to Length ( S ) do
begin
Ch := S[i];
if Ch > #127 then
begin
p := PosChar ( Ch, Cp852 );
if p > 0 then
begin
S[i] := Cp1250[p];
end;
end;
end;
Result := S;
end;
> Vsechno spatne ... Text se mi sice zobrazi v 852, ale jenom diky tomu fontu.
> Potrebuju ...cely obsah toho TMema prevest do 852 a pak odeslat ....
> Rumcajs
Odpovedá: ing. Jan Fiala
18. 10. 2002 11:06
A proc, kdyz v systemu existuji primo finkce OemToChar a CharToOem ?
--
ing. Jan Fiala
mailto:jan.fiala@iol.cz
18.10.2002 Peter Vlkovic:
> ku konverzii mozes pouzit napriklad aj nizsie
> uvedenu jednoucelovu funkciu.
> function cp852to1250 ( S: string ): string;
> var
> i: integer;
> p: integer;
> Ch: char;
> const
> Cp852 =
> #$A0#$61#$61#$61#$84#$63#$63#$87#$83#$64#$65#$82#$88#$65#$A1#$69+
> #$8D#$8C#$6C#$6E#$A4#$94#$A2#$94#$93#$AA#$A9#$73#$73#$A8#$9F#$74+
> #$81#$A3#$96#$81#$98#$7A#$7A#$91#$8F#$41#$41#$41#$8E#$43#$43#$80+
> #$85#$44#$45#$90#$89#$45#$8B#$49#$8A#$9C#$4C#$4E#$A5#$99#$95#$99+
> #$A7#$AB#$9E#$53#$53#$9B#$86#$54#$9A#$97#$A6#$9A#$9D#$5A#$5A#$92;
> Cp1250 =
> #$E1#$E2#$E3#$B9#$E4#$E6#$E7#$E8#$EF#$F0#$EB#$E9#$EC#$EA#$ED#$EE+
> #$E5#$BE#$B3#$F1#$F2#$F6#$F3#$F5#$F4#$E0#$F8#$9C#$BA#$9A#$9D#$FE+
> #$FC#$FA#$F9#$FB#$FD#$BF#$9F#$9E#$C1#$C2#$C3#$A5#$C4#$C6#$C7#$C8+
> #$CF#$D0#$CB#$C9#$CC#$CA#$CD#$CE#$C5#$BC#$A3#$D1#$D2#$D6#$D3#$D5+
> #$D4#$C0#$D8#$8C#$AA#$8A#$8D#$DE#$DC#$DA#$D9#$DB#$DD#$AF#$8F#$8E;
> begin
> for i := 1 to Length ( S ) do
> begin
> Ch := S[i];
> if Ch > #127 then
> begin
> p := PosChar ( Ch, Cp852 );
> if p > 0 then
> begin
> S[i] := Cp1250[p];
> end;
> end;
> end;
> Result := S;
> end;